package main

import "fmt"

func main() {
	sliceByArr()
	fmt.Println("--------------------------------")
	sliceMake()
}

//通过数组创建切片
func sliceByArr() {
	var arr = [5]int{1, 3, 5, 7, 9}
	// 从数组0下标开始取,一直取到2下标前面一个索引
	var sce = arr[0:2]
	fmt.Println(sce) // [1 3]
	// 切片len = 结束位置 - 开始位置
	fmt.Println(len(sce)) // 2 - 0 = 2
	fmt.Println(cap(sce)) // 5 - 0 = 5
	// 数组地址就是数组首元素的地址
	fmt.Printf("%p\n", &arr)    // 0xc04200a330
	fmt.Printf("%p\n", &arr[0]) // 0xc04200a330
	// 切片地址就是数组中指定的开始元素的地址
	//  arr[0:2]开始地址为0, 所以就是arr[0]的地址
	fmt.Printf("%p\n", sce) // 0xc04200a330
}

//通过make函数创建切片
func sliceMake() {
	var sec = make([]int, 3, 5)
	fmt.Println(sec)
	fmt.Println(len(sec))
	fmt.Println(cap(sec))
}

//切片类似于数组
//切片的扩容需要使用 append
